#ifndef MESI_PROTOCOL_H
#define MESI_PROTOCOL_H

#include <stdbool.h>

// MESI协议状态定义
typedef enum { 
    MODIFIED,      // 已修改状态 - 缓存中的数据已被修改，与主存不一致
    EXCLUSIVE,     // 独占状态   - 缓存中数据未被修改，且仅此缓存有该数据
    SHARED,        // 共享状态   - 缓存中数据未被修改，其他缓存可能有该数据
    INVALID        // 无效状态   - 缓存行无效
} CacheState;

// 缓存行结构体
typedef struct {
    int tag;           // 内存地址标签
    CacheState state;  // 当前状态
    int data;          // 缓存的数据
} CacheLine;

// CPU核结构体
typedef struct {
    CacheLine L1[2];   // L1缓存 - 2个缓存行
} CPU;

// 外部变量声明
extern CPU cores[2];         // 两个CPU核的L1缓存
extern int memory;           // 全局内存（共享）

// 函数声明
const char* state_to_string(CacheState state);
void init_cache();
void handle_load(int core_id, int address);
void handle_store(int core_id, int address);
void print_cache_state(int core_id);
void print_system_state();
void process_command(const char* input);

#endif // MESI_PROTOCOL_H
